From e843d9440539d8926888175d7fd4c250a4c273c7 Mon Sep 17 00:00:00 2001 From: William Hua Date: Mon, 8 Dec 2014 16:24:17 -0500 Subject: [PATCH] mir: only render non-top-level transients. --- gdk/mir/gdkmirwindowimpl.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/gdk/mir/gdkmirwindowimpl.c b/gdk/mir/gdkmirwindowimpl.c index eb90f7e3cc..98ec525621 100644 --- a/gdk/mir/gdkmirwindowimpl.c +++ b/gdk/mir/gdkmirwindowimpl.c @@ -288,13 +288,22 @@ redraw_transient (GdkWindow *window) gdk_window_invalidate_rect (GDK_MIR_WINDOW_IMPL (window->impl)->transient_for, &r, FALSE); } +/* Remove once we have proper transient window support. */ +static gboolean +should_render_in_parent (GdkWindow *window) +{ + GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl); + + return impl->transient_for && gdk_window_get_window_type (window) != GDK_WINDOW_TOPLEVEL; +} + static void send_buffer (GdkWindow *window) { GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl); /* Transient windows draw onto parent instead */ - if (impl->transient_for) + if (should_render_in_parent (window)) { redraw_transient (window); return; @@ -352,7 +361,7 @@ gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window) } /* Transient windows get rendered into a buffer and copied onto their parent */ - if (impl->transient_for || window->gl_paint_context) + if (should_render_in_parent (window) || window->gl_paint_context) { cairo_surface = cairo_image_surface_create (pixel_format, window->width, window->height); } @@ -450,7 +459,7 @@ gdk_mir_window_impl_hide (GdkWindow *window) impl->visible = FALSE; ensure_no_surface (window); - if (impl->transient_for) + if (should_render_in_parent (window)) redraw_transient (window); } @@ -464,7 +473,7 @@ gdk_mir_window_impl_withdraw (GdkWindow *window) impl->visible = FALSE; ensure_no_surface (window); - if (impl->transient_for) + if (should_render_in_parent (window)) redraw_transient (window); } @@ -519,13 +528,13 @@ gdk_mir_window_impl_move_resize (GdkWindow *window, GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl); /* Redraw parent where we moved from */ - if (impl->transient_for) + if (should_render_in_parent (window)) redraw_transient (window); /* Transient windows can move wherever they want */ if (with_move) { - if (impl->transient_for) + if (should_render_in_parent (window)) { window->x = x; window->y = y; @@ -552,7 +561,7 @@ gdk_mir_window_impl_move_resize (GdkWindow *window, } /* Redraw parent where we moved to */ - if (impl->transient_for) + if (should_render_in_parent (window)) redraw_transient (window); } @@ -729,7 +738,7 @@ gdk_mir_window_impl_destroy (GdkWindow *window, impl->visible = FALSE; ensure_no_surface (window); - if (impl->transient_for) + if (should_render_in_parent (window)) { /* Redraw parent */ redraw_transient (window); @@ -897,7 +906,7 @@ gdk_mir_window_impl_set_transient_for (GdkWindow *window, /* Link this window to the parent */ impl->transient_for = parent; - if (parent) + if (should_render_in_parent (window)) { GdkMirWindowImpl *parent_impl = GDK_MIR_WINDOW_IMPL (parent->impl); parent_impl->transient_children = g_list_append (parent_impl->transient_children, window); @@ -911,7 +920,8 @@ gdk_mir_window_impl_set_transient_for (GdkWindow *window, } /* Remove surface if we had made one before this was set */ - ensure_no_surface (window); + if (should_render_in_parent (window)) + ensure_no_surface (window); } /* TODO: Remove once we have proper transient window support. */ -- 2.30.2